package com.itheima.aop;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/**
 * @Author：cxl
 * @Package：com.itheima
 * @Project：web-project
 * @name：AOPDemo
 * @Date：2025/10/7 9:01
 * @Filename：AOPDemo
 */
@Component
@Aspect//切面类
@Slf4j
/*统计所有部门管理方法层的执行耗时*/
public class RecordTimeAspect {
    //定义切入点表达式，不用反复写那么长
    @Pointcut("execution(* com.itheima.service.impl.DeptServiceImpl.*(..))")
    public void pt() {}
    //第一个*表示任意返回值类型
    //第二个*表示任意方法名
    //..表示任意参数
    //around:环绕通知,返回类型必须是object
    @Around("pt()")
    public Object recordTime(ProceedingJoinPoint joinPoint) throws Throwable {
        long l = System.currentTimeMillis();
        //执行原始方法
        Object result = joinPoint.proceed();
        //结束时间
        long l1 = System.currentTimeMillis();
        log.info("方法{}耗时{}毫秒", joinPoint.getSignature().getName(), l1 - l);
        //这里必须要返回
        return result;
    }
}
